<script>
// 挂载到实例上面的称为实例属性、方法
// 挂载到原型上面的称为原型属性、方法
// 直接挂载到构造函数上的称为静态属性、方法，只能通过构造函数访问

// Promise.resolve()
// Promise.reject()
// then、catch
// 原型方法：then、catch

// arr.push

function Person(name, age) {
  // this => 实例对象
  this.name = name;
  this.age = age

  // 方法不应该挂到实例上面，这样会存在内存空间浪费的问题
  /* this.show = function() {
    console.log('Hello World')
  } */
}

Person.version = 18
Person.show = function() {
  console.log(888)
}
console.log(Person.version)
Person.show()

Person.prototype.show = function() {
  console.log('Hello World2') 
}

// Person 是当做构造函数来使用的
const p1 = new Person('ifer', 18)
const p2 = new Person('elser', 19)
// 方法应该挂到哪儿？
// console.log(p1.show === p2.show);
// p1.show()
// p1 实例上面没有 show，没关系，它会顺着原型链 __proto__ 找到 Person.prototype，一看，咿，有 show 就用
// console.log(p1.__proto__ === Person.prototype)
console.log(p1.show === p2.show);
</script>
